iT邦幫忙

1

透過 Crontab 排程備份 Mariadb (Mysql)使用 php + exec + mysqldump + gzip

  • 分享至 

  • xImage
  •  

一開始原本是用 php 去備份資料庫,但是發現會有一些問題,於是改成這種方式,直接透過 mysql 去備份,出來的格式也不會有什麼問題。

$ crontab -e

設定每天凌晨00:00 執行

0 0 * * * php /var/www/backup.php

backup.php 腳本記得開頭一定要 「<?php」,即便你有啟用縮寫

<?php
// 設定環境
header('Content-Type: text/html; charset=utf-8');
date_default_timezone_set('Asia/Taipei');

// 設定保存的資料夾位置
$dir = "/var/www/db/";

// 設定檔名
$filename = "dev-" . date("Y-m-d-H-i-s") . ".sql.gz";

// 設定資料庫
$db_host = "localhost";
$db_username = "root";
$db_password = "password";
$db_database = "db";

// 準備 cmd
$cmd = "mysqldump -h {$db_host} -u {$db_username} --password={$db_password} {$db_database} | gzip > {$dir}{$filename}";

// 執行 cmd
exec($cmd);

header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$filename\"");

passthru("cat {$dir}{$filename}");
?>

輸出時會經過 gzip 解壓縮
實驗過原本 150MB 的 sql 壓縮後為 28MB

參考
https://ianakaberlin.medium.com/php-crontab-%E4%BD%BF%E7%94%A8-php-%E9%80%8F%E9%81%8E-crontab-%E6%8E%92%E7%A8%8B%E5%9B%BA%E5%AE%9A%E6%99%82%E9%96%93%E5%82%99%E4%BB%BD-mariadb%E4%B8%A6%E4%B8%94%E8%87%AA%E5%8B%95%E5%A3%93%E7%B8%AE-sql-9f35db2b7236


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言